
import java.util.ArrayList;

/**
 * Contador.java
 * Descripción: Clase que permite analizar un texto ingresado para determinar
 *              los distintos carácteres que este contiene, así como la frecuencia
 *              de cada uno de ellos.
 * @author Oscar Castañeda 11086
 * @since 11/09/2012
 * @version 1.1
 */

public class Contador {
    
    private ArrayList<HuffmanAssociation> chars; //Carácteres hallados en la cadena y su respectiva frecuencia.
    
    /**
     * Constructor del contador.
     */
    public Contador(){
        chars = new ArrayList<>(10);
    }
    
    /**
     * Detecta los carácteres componentes de la cadena pasada como parámetro y la
     * frecuencia de cada uno de ellos.
     * @param cadena String a examinar.
     * @return ArrayList<HuffmanAssociation> Lista que contiene las HuffmanAssociation con los carácteres y sus frecuencias.
     */
    public ArrayList<HuffmanAssociation> countIn (String cadena){
        for(int charIndex = 0; charIndex < cadena.length(); charIndex++){
            //Se revisa cada uno de los caracteres de la cadena
            String actualChar = cadena.substring(charIndex, charIndex+1);
            //Se busca el índica de la asociación correspondiente a este carácter.
            int associationIndex = chars.indexOf(new HuffmanAssociation(actualChar));
            if (associationIndex >= 0){
                //Si el caracter ya había sido visto anteriormente, estará en la lista de chars y el índica debera de ser no negativo.
                chars.get(associationIndex).incrementFrequency();
            }else{
                //De lo contrario, debe de crearse la asociación para dicho carácter.
                chars.add(new HuffmanAssociation(actualChar));
            }
        }
        //Al finalizar, se devuelve la lista completa.
        ArrayList<HuffmanAssociation> resultado = chars;
        return resultado;
    }
    
    /**
     * Limpia la lista de carácteres del contador.
     */
    public void reset(){
        chars.clear();
    }
    
}
